package com.yk.neon.lib.util.base.json;

import java.util.List;
import java.util.Map;

public class JsonUtil {
	/**
	* 功能描述：把java对象转换成JSON数据
	* @param object java对象
	* @return JSON数据
	*/
	public static String beanToJson(Object object) {
		return FastJsonImpl.beanToJson(object);
	}

	/**
	* 功能描述：把java对象转换成JSON数据,保留null
	* @param object java对象
	* @return JSON数据
	*/
	public static String beanToJsonIncludeNull(Object object) {
		return FastJsonImpl.beanToJsonIncludeNull(object);
	}

	/**
	* 功能描述：把java对象转换成JSON数据,保留null,null转""
	* @param object java对象
	* @return JSON数据
	*/
	public static String beanToJsonReplaceNull(Object object) {
		return FastJsonImpl.beanToJsonReplaceNull(object);
	}

	/**
	 * 功能描述：把JSON数据转换成指定的java对象
	 * @param jsonData JSON数据
	 * @param clazz 指定的java对象
	 * @return 指定的java对象
	 */
	public static <T> T jsonToBean(String jsonData, Class<T> clazz) {
		return FastJsonImpl.jsonToBean(jsonData, clazz);
	}

	/**
	 * 功能描述：把JSON数据转换成指定的java对象列表
	 * @param jsonData JSON数据
	 * @param clazz 指定的java对象
	 * @return List<T>
	 */
	public static <T> List<T> jsonToList(String jsonData, Class<T> clazz) {
		return FastJsonImpl.jsonToList(jsonData, clazz);
	}

	/**
	 * 功能描述：把JSON数据转换成Map<String, T>
	 * @param jsonData JSON数据
	 * @param clazz 指定的java对象
	 * @return List<T>
	 */
	public static Map<String, Object> jsonToMap(String jsonData) {
		return FastJsonImpl.jsonToMap(jsonData);
	}

	/**
	 * 功能描述：把JSON数据转换成较为复杂的List<Map<String, Object>>
	 * @param jsonData JSON数据
	 * @return List<Map<String, Object>>
	 */
	public static List<Map<String, Object>> jsonToListMap(String jsonData) {
		return FastJsonImpl.jsonToListMap(jsonData);
	}

	/**
	 * 
	 * @param json 
	 * 			带转义字符的json
	 * @return 去除转移字符的json
	 */
	public static String removeEscape(String json) {
		if (json == null) {
			return null;
		}
		String result = json.replaceAll("\\\"", "\"");
		result = result.replaceAll("\\\\", "");
		String firStr = result.substring(0, 1);
		String endStr = result.substring(result.length() - 1, result.length());
		if (firStr.equals("\"") && endStr.equals("\"")) {
			result = result.substring(1, result.length() - 1);
		}
		return result;
	}

	/**
	* 功能描述：把java对象转换成JSON数据
	* @param object java对象
	* @return JSON数据
	*/
	public static String beanToJsonSafe(Object object) {
		return GsonImpl.gsonString(object);
	}

	/**
	* 功能描述：把java对象转换成JSON数据,保留null
	* @param object java对象
	* @return JSON数据
	*/
	public static String beanToJsonIncludeNullSafe(Object object) {
		return GsonImpl.gsonStringIncludeNull(object);
	}

	/**
	* 功能描述：把java对象转换成JSON数据,保留null,null转""
	* @param object java对象
	* @return JSON数据
	*/
	public static String beanToJsonReplaceNullSafe(Object object) {
		return GsonImpl.gsonStringReplaceNull(object);
	}

	/**
	 * 功能描述：把JSON数据转换成指定的java对象
	 * @param jsonData JSON数据
	 * @param clazz 指定的java对象
	 * @return 指定的java对象
	 */
	public static <T> T jsonToBeanSafe(String jsonData, Class<T> clazz) {
		return GsonImpl.gsonToBean(jsonData, clazz);
	}

	/**
	 * 功能描述：把JSON数据转换成指定的java对象列表
	 * @param jsonData JSON数据
	 * @param clazz 指定的java对象
	 * @return List<T>
	 */
	public static <T> List<T> jsonToListSafe(String jsonData, Class<T> clazz) {
		return GsonImpl.gsonToList(jsonData, clazz);
	}

	/**
	 * 功能描述：把JSON数据转换成Map<String, T>
	 * @param jsonData JSON数据
	 * @param clazz 指定的java对象
	 * @return List<T>
	 */
	public static Map<String, Object> jsonToMapSafe(String jsonData) {
		return GsonImpl.gsonToMaps(jsonData);
	}

	/**
	 * 功能描述：把JSON数据转换成较为复杂的List<Map<String, Object>>
	 * @param jsonData JSON数据
	 * @return List<Map<String, Object>>
	 */
	public static List<Map<String, Object>> jsonToListMapSafe(String jsonData) {
		return GsonImpl.gsonToListMaps(jsonData);
	}
}
